const createDepartmentService = () => import('~/service/service-manage/department.service')
import { RabbitService } from '~/service/rabbit/rabbit.service'

export default {
  /**
   * 启动执行逻辑
   * @param {*} param
   */
  launch({ dispatch }, resolve) {
    Promise.all([
      // 更新用户信息
      dispatch('getUserInfo')
      // 更新权限列表
      // dispatch('updateRoleData'),
      // 更新类型字典
      // dispatch('updateDictData')
    ]).then(
      // 生成用户数据
      async () => {
        await dispatch('generateUserData')
        resolve()
      }
    ).catch(ex => {
      console.log('系统初始化异常')
      resolve()
    })
  },
  /**
   * 异步更新机构数据
   */
  async updateDepartment({ commit }) {
    // 同步导入departmentService
    let { DepartmentService } = await createDepartmentService()
    // 单例
    DepartmentService.getInstance().getAllDeptList().subscribe(data => {
      commit('updateDepartment', data)
    })
  },
  /**
   * 更新用户登录数据
   */
  updateUserLoginData({ commit, dispatch }, { token, userInfo }) {
    // 更新用户token
    if (!!token) {
      commit('updateUserToken', token);
    }

    // 更新用户控件资源
    commit('updateUserMenuResource', userInfo.menu);

    // 更新用户菜单资源
    commit('updateUserControlResource', userInfo.resource);

    // 更新用户数据
    commit('updateUserData', {
      id: userInfo.user.id,
      realName: userInfo.user.realName,
      userName: userInfo.user.userName
    });

    // 机构数据
    dispatch('updateDepartment')

    // 初始化Rabbitmq
    RabbitService.connect()
  },
  /**
   * 清除登录数据
   */
  clearUserLoginData({ commit }) {
    // 重置用户token
    commit('updateUserToken', "");
    // 更新用户菜单资源
    commit('updateUserMenuResource', []);
    // 重置用户控件资源
    commit('updateUserControlResource', []);
    // 重置用户数据
    commit('updateUserData', {})
    //重置token过期标识
    commit('updateTokenExpire', false);
  },
  /**
   * 获取部门数据
   * @param param0
   */
  async getDepartmentList({ commit }) {
    let { DepartmentService } = await createDepartmentService()

    DepartmentService.getInstance().getAllDeptList().subscribe(data => {
      commit('updateDepartment', data)
    });
  },

}
